perm filename MIXLCS.FAI[TMP,LCS]1 blob
sn#193566 filedate 1975-12-23 generic text, type T, neo UTF8
00100 TITLE MIXER
00200 A←1 ↔ B←2 ↔ C←3 ↔ D←4 ↔ E←5
00300 DUR←6 ↔ MAX←7 ↔ R1←10 ↔ R2←11
00400 R3←12 ↔ BC1←13 ↔ BC2←14 ↔ BC3←15
00500 P←17 ↔ NBUFS←←4
00600 DEFINE FIXX(N)
00700 < JUMPGE N,.+5
00800 MOVNS N
00900 FIX N,233000
01000 MOVNS N
01100 CAIA
01200 FIX N,233000 >
01300 DEFINE FLOAT(N)
01400 < TLC N,232000
01500 FADR N,N >
01600
01700 MIXER: MOVE P,[IOWD 20,PDL]
01800 CLRBFI
01900 OUTSTR [ASCIZ/
02000 TYPE FIRST NAME : /]
02100 SETZ BC1,
02200 PUSHJ P,GNAME
02300 OPEN 11,[14↔'DSK '↔BUF1]
02400 JRST 4,.
02500 INBUF 11,NBUFS
02600 LOOKUP 11,FILNAM
02700 JRST MIXER
02800 AOJ BC1,
02900
03000 SECOND: CLRBFI
03100 OUTSTR [ASCIZ/ TYPE SECOND NAME : /]
03200 PUSHJ P,GNAME
03300 OPEN 2,[14↔'DSK '↔BUF2]
03400 JRST 4,.
03500 INBUF 2,NBUFS
03600 LOOKUP 2,FILNAM
03700 JRST SECOND
03800 AOJ BC1,
03900
04000 CLRBFI
04100 OUTSTR [ASCIZ/ NUMBER OF CHANNELS = /]
04200 INCHWL A
04300 PUSHJ P,INNUM
04400 SKIPLE
04500 CAILE 4
04600 HRRZI 1
04700 HRRZM NCHNLS#
04800 CLRBFI
04900 OUTSTR [ASCIZ/ SRATE = /]
05000 INCHWL A
05100 PUSHJ P,INNUM
05200 SKIPN
05300 HRRZI =10000
05400 FLOAT(0)
05500 MOVEM FSRATE#
05600 PUSHJ P,GDLAY
05700 MOVEM SNUM2#
05800
05900 GRAT: CLRBFI
06000 OUTSTR [ASCIZ/ SPLICE OR RATIO (S OR <R1>:<R2>) = /]
06100 INCHWL A
06200 CAIE A,"s"
06300 CAIN A,"S"
06400 JRST SPLICE
06500 SETZM SFLG#
06600 PUSHJ P,GETNUM
06700 SKIPG R1,
06800 MOVE R1,[DOT5: =0.5]
06900 FMPR R1,[=4096.]
07000 FIXX(R1)
07100 INCHRS A
07200 JRST .+3
07300 PUSHJ P,GETNUM
07400 SKIPG R2,
07500 MOVE R2,DOT5
07600 FMPR R2,[=4096.]
07700 FIXX(R2)
07800 PUSHJ P,ONAME
07900 AOJ BC2,
08000 SETZ MAX,
08100 SETOM DFLG#
08200 DLAY: ADD DUR,BC1
08300 CAML DUR,SNUM2
08400 JRST FIND
08500 PUSHJ P,MOV
08600 PUSHJ P,IN1
08700 JRST DLAY
08800
08900 MOV: ILDB D,A
09000 TDON D,[NEG: 777777774000]
09100 LDB D,A
09200 IMUL D,R1
09300 ASH D,-14
09400 CAMLE D,MAX
09500 MOVE MAX,D
09600 IDPB D,C
09700 SOJLE BC3,MOVO
09800 SOJG BC1,MOV
09900 POPJ P,
10000
10100 MOVO: PUSHJ P,OBUF
10200 SOJG BC1,MOV
10300 POPJ P,
10400
10500 FIND: SOJ BC2,
10600 SUB DUR,SNUM2
10700 SUB BC1,DUR
10800 SKIPLE BC1
10900 PUSHJ P,MOV
11000 SETFLG: SETZM DFLG
11100 MOVE BC1,DUR
11200 MOVE DUR,SNUM2
11300 ADD DUR,BC2
11400
11500 MIX: ILDB D,A
11600 TDON D,NEG
11700 LDB D,A
11800 ILDB E,B
11900 TDON E,NEG
12000 LDB E,B
12100 IMUL D,R1
12200 IMUL E,R2
12300 ADD D,E
12400 ASH D,-14
12500 CAMLE D,MAX
12600 MOVE MAX,D
12700 IDPB D,C
12800 SOJLE BC3,MIXO
12900 CKIN: SOJLE BC1,MIXI
13000 SOJG BC2,MIX
13100 PUSHJ P,IN2
13200 ADD DUR,BC2
13300 JRST MIX
13400
13500 MIXO: PUSHJ P,OBUF
13600 JRST CKIN
13700 MIXI: PUSHJ P,IN1
13800 JRST CKIN+1
13900 SPLICE: SETOM SFLG#
14000 PUSHJ P,ONAME
14100 MOVE [SPLOP,,MAX]
14200 BLT R3
14300 SLOOP: ADD DUR,BC3
14400 CAML DUR,SNUM2
14500 JRST NXPART
14600 PUSHJ P,MAX
14700 PUSHJ P,OBUF
14800 PUSHJ P,IN1
14900 JRST SLOOP
15000
15100 SPLOP: ILDB D,A
15200 IDPB D,C
15300 SOJG BC3,MAX
15400 POPJ P,
15500
15600 NXPART: SUB DUR,SNUM2
15700 SUB BC3,DUR
15800 SKIPLE BC1,BC3
15900 PUSHJ P,MAX
16000
16100 CLRBFI
16200 OUTSTR [ASCIZ/
16300 TYPE NEXT NAME OR <CR>: /]
16400 EXCH BC1,[MINO: -1]
16500 PUSHJ P,GNAME
16600 EXCH BC1,MINO
16700 OPEN 11,[14↔'DSK '↔BUF1]
16800 JRST 4,.
16900 INBUF 11,NBUFS
17000 LOOKUP 11,FILNAM
17100 JRST FINSH
17200 PUSHJ P,GDLAY
17300 MOVEM SNUM3#
17400 CAMG SNUM2
17500 JRST ;;;;→→
17600
17700
17800 FINSH: MOVE A,B
17900 SKIPLE BC3,DUR
18000 PUSHJ P,MAX
18100 PUSHJ P,OBUF
18200 EXCH DUR,SNUM2
18300 FIL2: ADD DUR,BC2
18400 SKIPLE BC3,BC1
18500 PUSHJ P,MAX
18600 PUSHJ P,IN2
18700 MOVE A,B
18800 SKIPLE BC3,SNUM2
18900 PUSHJ P,MAX
19000 PUSHJ P,OBUF
19100 JRST FIL2
19200 IN1: IN 11,
19300 CAIA
19400 JRST CKEOF
19410 MOVE R3,BUF1
19420 HRRZ R3,2(R3)
19430 CAIN R3,525252 ;GO BACK IF THIS IS A 'HEADER'
19440 JRST IN1
19450
19500 HRRZI BC1,3
19600 IMUL BC1,BUF1+2
19700 HRRZ A,BUF1+1
19800 HRLI A,1400
19900 POPJ P,
20000
20100 CKEOF: STATO 11,20000
20200 JRST 4,.
20300 SETOM EOF1
20400 SKIPGE EOF2
20500 JRST DONE
20600 SKIPL SFLG
20700 SKIPGE DFLG
20800 JRST BREAK
20900 PART2: MOVE R1,R2
21000 SOJLE BC2,GMOR
21100 MOVE BC1,BC2
21200 MOVE A,B
21300 PUSHJ P,MOV
21400 GMOR: PUSHJ P,IN2
21500 ADD DUR,BC2
21600 JRST PART2+2
21700
21800 BREAK: SUB DUR,SNUM2
21900 SKIPGE SFLG
22000 JRST ZSPL
22100 SETZ D,
22200 ZRIT: IDPB D,C
22300 SOJLE BC3,ZOB
22400 AOJL DUR,ZRIT
22500 MOVE DUR,SNUM2
22600 JRST PART2
22700
22800 ZOB: PUSHJ P,OBUF
22900 JRST ZRIT+2
23000
23100 ZSLOP: ADD DUR,BC3
23200 JUMPG DUR,ZEND
23300 HRLI C,-200
23400 SETZM 1(C)
23500 AOBJN C,.-1
23600 PUSHJ P,OBUF
23700 ZSPL: JUMPL DUR,ZSLOP
23800 HRRZI BC1,600
23900 JRST EQEND
24000
24100 ZEND: MOVE DUR
24200 SUB BC3
24300 MOVN BC1,
24400 SETZ
24500 IDPB C
24600 AOJL .-1
24700 EQEND: MOVE A,B
24800 POP P,D
24900 JRST FIL2-1 ;;;;→→→→
25000
25100
25200 IN2: IN 2,
25300 CAIA
25400 JRST CKEOF2
25410 MOVE R3,BUF2
25420 HRRZ R3,2(R3)
25430 CAIN R3,525252 ;GO BACK IF THIS IS A 'HEADER'
25440 JRST IN2
25450
25500 HRRZI BC2,3
25600 IMUL BC2,BUF2+2
25700 HRRZ B,BUF2+1
25800 HRLI B,1400
25900 POPJ P,
26000
26100 CKEOF2: STATO 2,20000
26200 JRST 4,.
26300 SETOM EOF2
26400 SKIPGE SFLG
26500 JRST ;;;;→→→→→
26600 SKIPGE EOF1
26700 JRST DONE
26800 ADD DUR,BC1
26900 PUSHJ P,MOV
27000 PUSHJ P,IN1
27100 JRST .-3
27200
27300 OBUF: HRRM C,BUF3+1
27400 OUT
27500 CAIA
27600 JRST 4,.
27700 HRRZI BC3,3
27800 IMUL BC3,BUF3+2
27900 HRRZ C,BUF3+1
28000 HRLI C,1400
28100 POPJ P,
28200
28300 ONAME: CLRBFI
28400 OUTSTR [ASCIZ/ OUTPUT NAME : /]
28500 PUSHJ P,GNAME
28600 OPEN [14↔'DSK '↔BUF3,,0]
28700 JRST 4,.
28800 OUTBUF NBUFS
28900 ENTER FILNAM
29000 JRST ONAME
29100 PUSHJ P,OBUF+1
29200 SETZM EOF1#
29300 SETZM EOF2#
29400 SETZ DUR,
29500 PUSHJ P,IN1
29600 PUSHJ P,IN2
29700 POPJ P,
29800 GDLAY: CLRBFI
29900 OUTSTR [ASCIZ/ DELAY TIME = /]
30000 INCHWL A
30100 PUSHJ P,GETNUM
30200 HRRZ A,NCHNLS
30300 FLOAT(A)
30400 FMPR A
30500 FMPR FSRATE
30600 FIXX(0)
30700 POPJ P,
30800
30900 DONE: PUSHJ P,OBUF
31000 RELEAS
31100 SKIPGE SFLG
31200 JRST NOMAX
31300 OUTSTR [ASCIZ/
31400 MAX AMPL = /]
31500 MOVE MAX
31600 PUSHJ P,OUTINT
31700 NOMAX: OUTSTR [ASCIZ/
31800 NUMBER OF SAMPLES = /]
31900 MOVE DUR
32000 PUSHJ P,OUTINT
32100 OUTSTR [ASCIZ/
32200 TOTAL DUR = /]
32300 IDIV DUR,NCHNLS
32400 FLOAT(DUR)
32500 FDVR DUR,FSRATE
32600 MOVE DUR
32700 FIXX(0)
32800 PUSHJ P,OUTINT
32900 HRRZI "."
33000 OUTCHR
33100 MOVE DUR
33200 FIXX(DUR)
33300 FLOAT(DUR)
33400 FSBR DUR
33500 FMPR [=10000.]
33600 FIXX(0)
33700 AOJ
33800 IDIVI =10
33900 PUSHJ P,OUTINT
34000 EXIT
34100 NAME: 'MUSIC '
34200 'MUSAA '
34300 'MUSIC '
34400 EXT: 'MUS '
34500 'DMD '
34600 'MUS '
34700 NONAM: SKIPL SFLG
34800 MOVE A,NAME(BC1)
34900 JRST GEXT
35000 GNAME: SETZM FILEXT+1
35100 SETZM FILPPN
35200 MOVE A,EXT(BC1)
35300 MOVEM A,FILEXT
35400 PUSHJ P,GETNAM
35500 JUMPE A,NONAM
35600 GEXT: MOVEM A,FILNAM
35700 CAIE C,"."
35800 JRST NOEXTN
35900 PUSHJ P,GETNAM
36000 MOVEM A,FILEXT
36100 NOEXTN: CAIE C,"["
36200 JRST FFDX
36300 PUSHJ P,GETP
36400 HRLZM A,FILPPN
36500 PUSHJ P,GETP
36600 HRRM A,FILPPN
36700 FFDX: INCHRW C
36800 CAIE C,12
36900 JRST FFDX
37000 POPJ P,
37100 GETNAM: MOVEI A,
37200 MOVE B,[440600,,A]
37300 GETNML: PUSHJ P,RCH
37400 POPJ P,
37500 SUBI C,40
37600 TLNE B,770000
37700 IDPB C,B
37800 JRST GETNML
37900
38000 GETP: MOVEI A,
38100 GETPL: PUSHJ P,RCH
38200 POPJ P,
38300 TRNE A,770000
38400 JRST GETPL
38500 LSH A,6
38600 ADDI A,-40(C)
38700 JRST GETPL
38800
38900 RCH: INCHWL C
39000 CAIN C,42
39100 JRST RCHQ
39200 CAIE C,11
39300 CAIN C," "
39400 JRST RCH
39500 CAIE C,"."
39600 CAIN C,","
39700 POPJ P,
39800 CAIE C,"["
39900 CAIN C,"]"
40000 POPJ P,
40100 RCHQR: CAIGE C,40
40200 POPJ P,
40300 CAIL C,"a"
40400 CAILE C,"z"
40500 CAIA
40600 SUBI C,40
40700 POPJ1: AOS (P)
40800 POPJ P,
40900
41000 RCHQ: INCHWL C
41100 JRST RCHQR
41200 GETNUM: PUSHJ P,INNUM
41300 FLOAT(0)
41400 CAIE A,"."
41500 POPJ P,
41600 MOVE C,
41700 INCHRS A
41800 POPJ P,
41900 PUSHJ P,INNUM
42000 JUMPE NODP
42100 FLOAT(0)
42200 FMPR TABL(B)
42300 NODP: FADR C
42400 POPJ P,
42500
42600 TABL: =0.1
42700 =0.01
42800 =0.001
42900 =0.0001
43000 =0.00001
43100
43200 INNUM: SETZ
43300 SETO B,
43400 CAIL A,60
43500 CAILE A,71
43600 POPJ P,
43700 IMULI =10
43800 ADDI -60(A)
43900 AOJ B,
44000 INCHRS A
44100 POPJ P,
44200 JRST INNUM+2
44300
44400 OUTINT: HRRZI B,7
44500 JUMPE OUTZ
44600 IDIVI =10
44700 ADDI A,60
44800 HRRZM A,BLK(B)
44900 SOJGE B,OUTINT+1
45000 OCHR: OUTCHR BLK+1(B)
45100 CAIGE B,6
45200 AOJA B,OCHR
45300 POPJ P,
45400 OUTZ: CAIL B,7
45500 HRLZI B,300000
45600 JRST OCHR
45700
45800 FILNAM: 0
45900 FILEXT: 0
46000 0
46100 FILPPN: 0
46200 BUF1: BLOCK 3
46300 BUF2: BLOCK 3
46400 BUF3: BLOCK 3
46500 PDL: BLOCK 44
46600 ACBLK: BLOCK 20
46700 BLK: BLOCK 10
46800 END MIXER